package com.bjsxt.utils;

import com.bjsxt.constants.Constants;
import com.bjsxt.domain.SimpleUser;
import com.bjsxt.domain.User;
import com.bjsxt.vo.ActiveUser;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;

import java.util.List;

/**
 * @author:liao
 * @Description:TODO 从shiro中取出各种信息
 * @date:2020/11/27
 */
public class ShiroSecurityUtils {
    /**
     * 获取拥有用户角色 权限的用户对象
     * @return
     */
    public static ActiveUser getCurrentActiveUser(){
        // 获取主体
        Subject subject = SecurityUtils.getSubject();
        // 获取对象
        ActiveUser activeUser = (ActiveUser) subject.getPrincipal();
        return activeUser;
    }

    /**
     * 获取当前登录的用户对象
     */
    public static User getCurrentUser(){
        return getCurrentActiveUser().getUser();
    }

    /**
     * 得到当前登录的用户对象SimpleUser
     */
    public static SimpleUser getCurrentSimpleUser(){
        User user = getCurrentActiveUser().getUser();
        return new SimpleUser(user.getUserId(),user.getUserName());
    }

    /**
     * 得到当前登录用户的用户名称
     */
    public static String getCurrentUserName(){
        return getCurrentActiveUser().getUser().getUserName();
    }

    /**
     * 得到当前登录用户的角色编码
     */
    public static List<String> getCurrentUserRoles(){
        return getCurrentActiveUser().getRoles();
    }

    /**
     * 得到当前登录用户的权限列表
     */
    public static List<String> getCurrentUserPermissions(){
        return getCurrentActiveUser().getPermissions();
    }

    /**
     * 判断当前用户是否是超级管理员
     */
    public static boolean isAdmin(){
        return getCurrentUser().getStatus().equals(Constants.USER_ADMIN);
    }
}
